home *** CD-ROM | disk | FTP | other *** search
- /* GadTools layout toolkit
- **
- ** Copyright © 1993-1995 by Olaf `Olsen' Barthel
- ** Freely distributable.
- */
-
- #include "gtlayout_global.h"
-
- VOID __regargs
- LTP_Spread(LayoutHandle *Handle,ObjectNode *Group,LONG Width,LONG Height)
- {
- ObjectNode *Node;
- LONG Count;
-
- Count = 0;
-
- SCANGROUP(Group,Node)
- {
- Count++;
- }
-
- if(Group -> Special . Group . Horizontal)
- {
- LONG Room = Width - Group -> Width,Left,Width,i = 0;
-
- if(Count > 1)
- {
- Left = 0;
-
- Room += --Count * Handle -> InterWidth;
- }
- else
- Left = Room / 2;
-
- SCANGROUP(Group,Node)
- {
- if(!LIKE_STRING_KIND(Node) || Node -> Special . String . LinkID == -1)
- {
- Width = Node -> Width;
-
- switch(Node -> LabelPlace)
- {
- case PLACE_LEFT:
-
- if(Node -> Type == MX_KIND)
- {
- Left += Node -> Special . Radio . LabelWidth + INTERWIDTH;
-
- if(Node -> Label)
- {
- if(Node -> Special . Radio . TitlePlace == PLACETEXT_LEFT)
- Left += Node -> LabelWidth + INTERWIDTH;
- else
- Width += INTERWIDTH + Node -> LabelWidth;
- }
- }
- else
- Left += Node -> LabelWidth + INTERWIDTH;
-
- break;
-
- case PLACE_RIGHT:
-
- if(Node -> Type == MX_KIND)
- {
- Width += INTERWIDTH + Node -> Special . Radio . LabelWidth;
-
- if(Node -> Label)
- {
- if(Node -> Special . Radio . TitlePlace == PLACETEXT_LEFT)
- Left += Node -> LabelWidth + INTERWIDTH;
- else
- Width += INTERWIDTH + Node -> LabelWidth;
- }
- }
- else
- Width += INTERWIDTH + Node -> LabelWidth;
-
- break;
- }
-
- if(Node -> Type == LISTVIEW_KIND && Node -> Special . List . ExtraLabelWidth)
- Left += Node -> Special . List . ExtraLabelWidth + INTERWIDTH;
-
- if(Node -> Type == SLIDER_KIND)
- {
- if(Node -> Special . Slider . LevelPlace == PLACETEXT_RIGHT)
- Width += INTERWIDTH + Node -> Special . Slider . LevelWidth;
-
- if(Node -> Special . Slider . LevelPlace == PLACETEXT_LEFT && Node -> LabelPlace != PLACE_LEFT)
- Left += INTERWIDTH + Node -> Special . Slider . LevelWidth;
- }
-
- #ifdef DO_LEVEL_KIND
- if(Node -> Type == LEVEL_KIND)
- {
- if(Node -> Special . Level . LevelPlace == PLACETEXT_RIGHT)
- Width += INTERWIDTH + Node -> Special . Level . MaxLevelWidth;
-
- if(Node -> Special . Level . LevelPlace == PLACETEXT_LEFT && Node -> LabelPlace != PLACE_LEFT)
- Left += INTERWIDTH + Node -> Special . Level . MaxLevelWidth;
- }
- #endif /* DO_LEVEL_KIND*/
-
- Node -> Left = Left;
-
- Left += Width + ((Room * (i + 1)) / Count - (Room * i) / Count);
-
- i++;
- }
- }
- }
- else
- {
- LONG Room = Height - Group -> Height,Height,Top,y,i = 0;
-
- if(Count > 1)
- {
- Top = 0;
-
- Room += --Count * Handle -> InterHeight;
- }
- else
- Top = Room / 2;
-
- SCANGROUP(Group,Node)
- {
- if(!LIKE_STRING_KIND(Node) || Node -> Special . String . LinkID == -1)
- {
- if(Count++)
- {
- if(Node -> ExtraSpace > 0)
- y = Top + Node -> ExtraSpace * Handle -> InterHeight;
- else
- {
- if(Node -> ExtraSpace < 0)
- y = Top - Node -> ExtraSpace;
- else
- y = Top + Handle -> InterHeight;
- }
- }
- else
- y = Top;
-
- if(Node -> LabelPlace == PLACE_ABOVE)
- y += Handle -> RPort . TxHeight + INTERHEIGHT;
-
- Node -> Top = y;
-
- if(Node -> LabelPlace == PLACE_BELOW && Node -> Label)
- Height = Node -> Height + INTERHEIGHT + Handle -> RPort . TxHeight;
- else
- Height = Node -> Height;
-
- Top = y + Height + ((Room * (i + 1)) / Count - (Room * i) / Count);
-
- i++;
- }
- }
- }
- }
-